/**
|--------------------------------------------------
| 给你两个数组，arr1 和 arr2，arr2 中的元素各不相同，
arr2 中的每个元素都出现在 arr1 中。

对 arr1 中的元素进行排序，使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。
未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。


输入：arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出：[2,2,2,1,4,3,3,9,6,7,19]

输入：arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]
输出：[22,28,8,6,17,44]

1 <= arr1.length, arr2.length <= 1000

|--------------------------------------------------
*/

var relativeSortArray = function (arr1, arr2) {
  let map = new Map();
  let result = [],
    arr = [];
  //使用哈希记录arr1每个
  for (let i = 0; i < arr1.length; i++) {
    if (map.has(arr1[i])) {
      map.get(arr1[i]).push(arr1[i]);
    } else {
      map.set(arr1[i], [arr1[i]]);
    }
  }

  //arr2元素存放哈希 arr对应的集合
  for (let i = 0; i < arr2.length; i++) {
    if (map.has(arr2[i])) {
      result = result.concat(map.get(arr2[i])); //[[22]]
      map.delete(arr2[i]); //删除对应元素
    }
  }

  //遍历arr1 剩余部分的元素
  for (let [key, val] of map.entries()) {
    arr = arr.concat(val);
  }
  //剩余部分排序
  arr.sort((a, b) => a - b);
  return result.concat(arr);
};
